# Copyright (c) 2024 Huawei Technologies Co., Ltd.
# This file is a part of the CANN Open Software.
# Licensed under CANN Open Software License Agreement Version 1.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
# ======================================================================================================================

cmake_minimum_required(VERSION 3.14)
project (ascend)

set(INSTALL_BASE_DIR "")
set(INSTALL_LIBRARY_DIR lib)
set(INSTALL_RUNTIME_DIR bin)
set(INSTALL_INCLUDE_DIR include)
set(INSTALL_CONFIG_DIR cmake)
include(CMakePackageConfigHelpers)

set(BASE_DIR ${CMAKE_CURRENT_LIST_DIR})

option(ENABLE_OPEN_SRC "Enable acl compile in opensource." FALSE)

if(ENABLE_OPEN_SRC)
    set(CANN_GE_DIR ${CMAKE_CURRENT_LIST_DIR}/third_party/cann-graph-engine)
    set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/third_party/metadef)
else()
    set(CANN_GE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../air)
    set(METADEF_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../metadef)
endif()

if(ENABLE_OPEN_SRC)
    set(CMAKE_MODULE_PATH
        ${CMAKE_CURRENT_LIST_DIR}/cmake/modules
        ${CANN_GE_DIR}/cmake/modules
        ${METADEF_DIR}/cmake/modules
        ${ASCEND_3RD_LIB_PATH}/cmake/modules
    )

    set(CMAKE_PREFIX_PATH
        ${ASCEND_3RD_LIB_PATH}/jpeg
        ${ASCEND_3RD_LIB_PATH}/json
        ${ASCEND_3RD_LIB_PATH}/openssl
        ${ASCEND_3RD_LIB_PATH}/protoc
        ${ASCEND_3RD_LIB_PATH}/protoc_grpc
        ${ASCEND_3RD_LIB_PATH}/grpc
        ${ASCEND_3RD_LIB_PATH}/protobuf_static
        ${ASCEND_3RD_LIB_PATH}/ascend_protobuf
        ${ASCEND_3RD_LIB_PATH}/ascend_protobuf_static
        ${ASCEND_3RD_LIB_PATH}/gtest_shared/lib64/cmake/GTest
        ${ASCEND_3RD_LIB_PATH}/benchmark
        ${ASCEND_3RD_LIB_PATH}/pybind11
	${ASCEND_3RD_LIB_PATH}/symengine/lib/cmake/symengine
        ${ASCEND_3RD_LIB_PATH}/boost/lib/cmake/Boost-1.82.0
        ${ASCEND_INSTALL_PATH}
        ${CMAKE_CURRENT_LIST_DIR}/third_party/inc
        ${CANN_GE_DIR}/inc/framework/executor_c
    )

    include(${BASE_DIR}/cmake/intf_pub_linux.cmake)
    include(cmake/function.cmake)
    include(CMakePrintHelpers)
    message(STATUS "Variables in acl project:")
    cmake_print_variables(ENABLE_OPEN_SRC)
    cmake_print_variables(ASCENDCL_C)
    cmake_print_variables(ENABLE_GE_COMPILE)
    cmake_print_variables(ENABLE_ENGINES_COMPILE)
    cmake_print_variables(ENABLE_EXECUTOR_C_COMPILE)
    cmake_print_variables(ENABLE_ACL_UT)
    cmake_print_variables(ENABLE_ACL_COV)
    cmake_print_variables(ENABLE_C_UT)
    cmake_print_variables(ENABLE_C_COV)
    cmake_print_variables(PLATFORM)
    cmake_print_variables(PRODUCT)
    cmake_print_variables(ASCEND_INSTALL_PATH)
    cmake_print_variables(ASCEND_3RD_LIB_PATH)
    cmake_print_variables(CMAKE_BUILD_TYPE)
    cmake_print_variables(CMAKE_INSTALL_PREFIX)
    cmake_print_variables(CMAKE_PREFIX_PATH)
    cmake_print_variables(CMAKE_MODULE_PATH)
    cmake_print_variables(CMAKE_SYSTEM_PROCESSOR)

    set(TARGET_SYSTEM_NAME "Linux")
    set(HI_PYTHON python3)

    # 开源软件包
    find_package(Threads REQUIRED)
    find_package(json MODULE REQUIRED)
    find_package(protoc MODULE REQUIRED)
    find_package(protoc_grpc MODULE REQUIRED)
    find_package(protobuf_grpc MODULE REQUIRED)
    find_package(protobuf_static MODULE REQUIRED)
    find_package(ascend_protobuf_static MODULE REQUIRED)
    find_package(openssl MODULE REQUIRED)
    find_package(zlib MODULE REQUIRED)
    find_package(ascend_protobuf_shared MODULE REQUIRED)
    find_package(gRPC CONFIG)
    find_package(securec MODULE REQUIRED)
    find_package(jpeg MODULE REQUIRED)
    find_package(GTest CONFIG REQUIRED)

    if(ENABLE_ACL_COV OR ENABLE_ACL_UT)
        add_subdirectory(tests)
    else()
        find_package(slog MODULE REQUIRED)
        find_package(mmpa MODULE REQUIRED)
        find_package(opcompiler MODULE REQUIRED)
        find_package(platform MODULE REQUIRED)
        find_package(ascend_hal MODULE REQUIRED)
        find_package(runtime MODULE REQUIRED)
        find_package(adump MODULE REQUIRED)
        find_package(msprof MODULE REQUIRED)
        find_package(tdt MODULE REQUIRED)
        find_package(acldvpp MODULE REQUIRED)
        find_package(awatchdog MODULE REQUIRED)
        add_subdirectory(third_party/cann-graph-engine EXCLUDE_FROM_ALL)
        add_subdirectory(third_party/metadef EXCLUDE_FROM_ALL)

        if(PLATFORM STREQUAL "train")
            if(PRODUCT STREQUAL "flr3")
                message(FATAL_ERROR "This platform is not supported in train mode, build terminated")
            endif()
        endif()
    endif()

    if (PRODUCT STREQUAL "nano")
        if(ENABLE_C_COV OR ENABLE_C_UT)
            add_subdirectory(tests/ut/acl/testcase_c)
        else()
            find_package(c_mmpa MODULE REQUIRED)
            find_package(c_base MODULE REQUIRED)
            find_package(runtime_static MODULE REQUIRED)
            add_subdirectory(c)
        endif()
    endif()
endif()

if(NOT ENABLE_OPEN_SRC)
    add_subdirectory(c)
endif()

###################################################################################################
add_library(ascendcl_headers INTERFACE)
target_include_directories(ascendcl_headers INTERFACE
    $<BUILD_INTERFACE:${BASE_DIR}/inc>
    $<BUILD_INTERFACE:${BASE_DIR}/inc/external>
    $<BUILD_INTERFACE:${BASE_DIR}/inc/external/acl>
    $<BUILD_INTERFACE:${BASE_DIR}/inc/external/acl/error_codes>
    $<BUILD_INTERFACE:${BASE_DIR}/inc/external/acl/ops>
    $<INSTALL_INTERFACE:include>
    $<INSTALL_INTERFACE:include/ascendcl>
    $<INSTALL_INTERFACE:include/ascendcl/external>
    $<INSTALL_INTERFACE:include/ascendcl/external/acl>
    $<INSTALL_INTERFACE:include/ascendcl/external/acl/error_codes>
    $<INSTALL_INTERFACE:include/ascendcl/external/acl/ops>
)

set(SRC_LIST
    runtime/device.cpp
    runtime/event.cpp
    runtime/stream.cpp
    runtime/memory.cpp
    runtime/context.cpp
    runtime/callback.cpp
    runtime/group.cpp
    runtime/allocator.cpp
    runtime/kernel.cpp
    model/model.cpp
    model/acl_aipp.cpp
    model/aipp_param_check.cpp
    model/model_config.cpp
    model/acl_resource_manager.cpp
    common/acl.cpp
    common/log_inner.cpp
    common/log.cpp
    common/json_parser.cpp
    common/error_codes_api.cpp
    single_op/compile/op_compiler.cpp
    single_op/compile/op_compile_service.cpp
    single_op/builtin/cast_op.cpp
    single_op/op.cpp
    single_op/op_executor.cpp
    single_op/op_model_cache.cpp
    single_op/op_model_parser.cpp
    single_op/ge_tensor_cache.cpp
    single_op/shape_range_utils.cpp
    types/acl_op.cpp
    types/fp16.cpp
    types/fp16_impl.cpp
    types/op_attr.cpp
    types/op_model.cpp
    types/tensor_desc_internal.cpp
    utils/array_utils.cpp
    utils/attr_utils.cpp
    utils/file_utils.cpp
    utils/string_utils.cpp
    utils/math_utils.cpp
    utils/hash_utils.cpp
    utils/cann_info_utils.cpp
    toolchain/dump.cpp
    toolchain/profiling.cpp
    toolchain/profiling_manager.cpp
    toolchain/resource_statistics.cpp
    single_op/compile/op_kernel_selector.cpp
    single_op/compile/op_kernel_registry.cpp
    single_op/executor/op_task.cpp
    single_op/executor/resource_manager.cpp
    single_op/executor/stream_executor.cpp
)

############ libascendcl.so ############
if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
    add_library(ascendcl SHARED ${SRC_LIST} $<TARGET_OBJECTS:profapi_stub>)
else()
    add_library(ascendcl SHARED ${SRC_LIST})
endif()

if(ENABLE_OPEN_SRC)
    add_library(msprofiler_object OBJECT IMPORTED GLOBAL)
    if (msprofiler_ext_LIBRARY_DIR)
        file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_object)
        execute_process(
            COMMAND ar x ${msprofiler_ext_LIBRARY_DIR}
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_object
        )
        file(GLOB MSPROFILER_OBJECT_LIST ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_object/*.o)
        set_property(TARGET msprofiler_object PROPERTY IMPORTED_OBJECTS ${MSPROFILER_OBJECT_LIST})
    endif()
endif()

target_include_directories(ascendcl PRIVATE
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/framework>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/adump/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/adump/inc/adump>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/driver>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/dvpp/inc/external/dvpp>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/dvpp/inc/dvpp>

    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/framework>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/adump/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal/driver>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/dvpp/inc/dvpp>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/acl/dvpp>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/awatchdog>

    ${BASE_DIR}/inc/external/acl
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
    ${BASE_DIR}/toolchain
)

target_compile_options(ascendcl PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -fno-common>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8 /Od>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Debug>>:/MTd>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Release>>:/MT>
)
target_compile_definitions(ascendcl PRIVATE
    $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,OS_TYPE=WIN,OS_TYPE=0>
    LOG_CPP
    FUNC_VISIBILITY
    google=ascend_private
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:SECUREC_USING_STD_SECURE_LIB=0 NOMINMAX>
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)
target_link_options(ascendcl PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)
target_link_directories(ascendcl PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/build/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
)

set(linklibs ascend_hal_stub)
if (NOT ENABLE_OPEN_SRC)
    if (PRODUCT)
        if (PRODUCT STREQUAL "npuf10")
            set(linklibs )
            if (${TARGET_SYSTEM_NAME} STREQUAL "Android")
                target_link_directories(ascendcl PRIVATE
                    ${TOP_DIR}/vendor/sdk/hi3796/drv_android
                )
            elseif(${TARGET_LINUX_DISTRIBUTOR_RELEASE} STREQUAL 100)
                target_link_directories(ascendcl PRIVATE
                    ${TOP_DIR}/vendor/sdk/hi3796/drv
                )
            elseif(${TARGET_LINUX_DISTRIBUTOR_RELEASE} STREQUAL 200)
                target_link_directories(ascendcl PRIVATE
                    ${TOP_DIR}/vendor/sdk/hi3559dv100/drv
                )
            endif()
            list(APPEND linklibs -ldrvdevdrv -ldrv_dfx)
        else ()
            list(APPEND linklibs ascend_hal_stub)
        endif()
    endif()
else ()
    if(PRODUCT STREQUAL "flr2")
        set(linklibs )
    endif()
    if(PRODUCT STREQUAL "flr3")
        set(linklibs )
        if (${TARGET_SYSTEM_NAME} STREQUAL "Android")
            list(APPEND linklibs ${ASCEND_INSTALL_PATH}/drv_android)
        else()
            list(APPEND linklibs ${ASCEND_INSTALL_PATH}/drv)
        endif()
        list(APPEND linklibs -ldrvdevdrv -ldrv_dfx)
    endif()
endif()

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
    set(linklibs ascend_hal)
endif()

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
target_link_libraries(ascendcl
    PRIVATE
        $<BUILD_INTERFACE:intf_pub>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
        -Wl,--whole-archive
        ge_executor
        -Wl,--no-whole-archive
        ge_common_static
        graph_static
        ascend_protobuf_static
        register_static
        error_manager_static
        ascend_dump
        static_mmpa
        gert_static
        exe_graph_static
        -Wl,--no-as-needed
        c_sec
        runtime
        alog
        ${linklibs}
        -Wl,--as-needed
        $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
        -ldl
        $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:-llog>
        json
    PUBLIC
        ascendcl_headers
)
else()
target_link_libraries(ascendcl
    PRIVATE
        $<BUILD_INTERFACE:intf_pub>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
        $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
        -Wl,--whole-archive
        -Wl,--no-whole-archive
        ascend_dump
        awatchdog_share
        $<$<BOOL:${ENABLE_OPEN_SRC}>:adcore>
        static_mmpa
        -Wl,--no-as-needed
        msprofiler_fwk_share
        profapi_share
        ge_common
        graph
        exe_graph
        ascend_protobuf
        error_manager
        ge_executor_shared
        gert
        c_sec
        runtime
        alog
        ${linklibs}
        -Wl,--as-needed
        $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
        -ldl
        $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:-llog>
        json
    PUBLIC
        ascendcl_headers
)
endif()

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
set_target_properties(ascendcl PROPERTIES
    LINK_FLAGS "/WHOLEARCHIVE:ge_executor"
    WINDOWS_EXPORT_ALL_SYMBOLS TRUE
    OUTPUT_NAME libascendcl
)
endif()

if (NOT ENABLE_OPEN_SRC)
############ libascendcl.a ############
add_library(ascendcl_static STATIC ${SRC_LIST})

target_include_directories(ascendcl_static PRIVATE
    ${TOP_DIR}/inc
    ${TOP_DIR}/metadef/inc
    ${TOP_DIR}/graphengine/inc
    ${TOP_DIR}/graphengine/inc/framework
    ${BASE_DIR}/inc/external/acl
    ${BASE_DIR}/inc/external
    ${TOP_DIR}/metadef/inc/external
    ${TOP_DIR}/graphengine/inc/external
    ${TOP_DIR}/toolchain/ide/ide-daemon/external
    ${TOP_DIR}/abl/msprof/inc
    ${TOP_DIR}/abl/adump/external
    ${TOP_DIR}/abl/adump/inc/adump
    ${TOP_DIR}/inc/driver
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
    ${BASE_DIR}/toolchain
    ${TOP_DIR}/ace/dvpp/inc/external/dvpp
    ${TOP_DIR}/ace/dvpp/inc/dvpp
)

target_compile_options(ascendcl_static PRIVATE
     $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -fno-common>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8 /Od>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Debug>>:/MTd>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Release>>:/MT>
)
target_compile_definitions(ascendcl_static PRIVATE
    $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,OS_TYPE=WIN,OS_TYPE=0>
    FUNC_VISIBILITY
    LOG_CPP
    google=ascend_private
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:SECUREC_USING_STD_SECURE_LIB=0 NOMINMAX>
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)
target_link_options(ascendcl_static PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)
target_link_directories(ascendcl_static PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/build/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
)

target_link_libraries(ascendcl_static PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<BUILD_INTERFACE:mmpa_headers>
    $<BUILD_INTERFACE:msprof_headers>
    $<BUILD_INTERFACE:slog_headers>
    $<BUILD_INTERFACE:runtime_headers>
    $<BUILD_INTERFACE:awatchdog_headers>
    c_sec
    json
    ascend_protobuf
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:-llog>
)

set_target_properties(ascendcl_static PROPERTIES
    OUTPUT_NAME $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,libascendcl,ascendcl>
)
endif()

if(NOT (ENABLE_OPEN_SRC AND ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3"))))
############ fwk/libascendcl.so ############
add_library(fwk_ascendcl SHARED
    ${SRC_LIST}
)

if (ENABLE_OPEN_SRC)
    add_library(msprofiler_fwkacl_object OBJECT IMPORTED GLOBAL)
    if (msprofiler_fwkacl_ext_LIBRARY_DIR)
        file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_fwkacl_object)
        execute_process(
            COMMAND ar x ${msprofiler_fwkacl_ext_LIBRARY_DIR}
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_fwkacl_object
        )
        file(GLOB MSPROFILER_FWKACL_OBJECT_LIST ${CMAKE_CURRENT_BINARY_DIR}/msprofiler_fwkacl_object/*.o)
        set_property(TARGET msprofiler_fwkacl_object PROPERTY IMPORTED_OBJECTS ${MSPROFILER_FWKACL_OBJECT_LIST})
    endif()
endif()

target_include_directories(fwk_ascendcl PRIVATE
 ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/tdt>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/framework>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/toolchain/ide/ide-daemon/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/adump/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/adump/inc/adump>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/driver>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/msprof/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/dvpp/inc/external/dvpp>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/dvpp/inc/dvpp>

    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/tdt>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/framework>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/adump/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal/driver>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/dvpp/inc/dvpp>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/acl/dvpp>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/awatchdog>
    ${BASE_DIR}/inc/external/acl
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
    ${BASE_DIR}/toolchain
)
target_compile_options(fwk_ascendcl PRIVATE
    -O2
    -fvisibility=hidden
    -fno-common
)
target_compile_definitions(fwk_ascendcl PRIVATE
    OS_TYPE=0
    FUNC_VISIBILITY
    google=ascend_private
    $<$<STREQUAL:${ENABLE_OPEN_SRC}, True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)
target_link_options(fwk_ascendcl PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)
target_link_directories(fwk_ascendcl PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Android>:${TOP_DIR}/build/prebuilts/clang/linux-x86/aarch64/android-ndk-r21/sysroot/usr/lib/aarch64-linux-android/29>
)

target_link_libraries(fwk_ascendcl PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    ascend_dump
    awatchdog_share
    $<$<BOOL:${ENABLE_OPEN_SRC}>:adcore>
    static_mmpa
    -Wl,--no-as-needed
    c_sec
    msprofiler_fwk_share
    profapi_share
    runtime
    slog
    ge_common
    graph
    ascend_protobuf
    register
    error_manager
    ge_runner
    datatransfer
    ascend_hal_stub
    -Wl,--as-needed
    json
    -ldl
    -lrt
)

set_target_properties(fwk_ascendcl PROPERTIES
    OUTPUT_NAME ascendcl
    LIBRARY_OUTPUT_DIRECTORY fwkacl
)
endif()

##################################################################################################################
add_custom_target(
    stub_src ALL
    DEPENDS  ${CMAKE_CURRENT_BINARY_DIR}/acl_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/dvpp_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/cblas_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/op_compiler_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/retr_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/tdt_channel_stub.cpp
             ${CMAKE_CURRENT_BINARY_DIR}/tdt_queue_stub.cpp
)
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/acl_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/dvpp_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/cblas_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/op_compiler_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/retr_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/tdt_channel_stub.cpp
           ${CMAKE_CURRENT_BINARY_DIR}/tdt_queue_stub.cpp
    COMMAND echo "Generating stub files:acl_stub.cpp, dvpp_stub.cpp, cblas_stub.cpp, op_compiler_stub.cpp, retr_stub.cpp, tdt_channel_stub.cpp, tdt_queue_stub.cpp."
            && ${HI_PYTHON} ${BASE_DIR}/stub/gen_stubapi.py ${BASE_DIR}/inc/external/acl
            ${CMAKE_CURRENT_BINARY_DIR}/acl_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/dvpp_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/cblas_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/op_compiler_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/retr_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/tdt_channel_stub.cpp
            ${CMAKE_CURRENT_BINARY_DIR}/tdt_queue_stub.cpp
            && echo "Generating stub files end."
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    DEPENDS stub/gen_stubapi.py ${BASE_DIR}/inc/external/acl
)
#----------------------------------------------------------------------------------------------------------------#

############ stub/libascendcl.so ############
add_library(stub_ascendcl SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/acl_stub.cpp
)

target_compile_definitions(stub_ascendcl PRIVATE
    _FORTIFY_SOURCE=2
)

set_target_properties(stub_ascendcl
    PROPERTIES
    OUTPUT_NAME ascendcl
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_include_directories(stub_ascendcl PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
)

target_link_libraries(stub_ascendcl
    PRIVATE
        $<BUILD_INTERFACE:intf_pub>
    PUBLIC
        ascendcl_headers
)

#----------------------------------------------------------------------------------------------------------------#
############ stub/libacl_dvpp.so ############
add_library(stub_acl_dvpp SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/dvpp_stub.cpp
)

set_target_properties(stub_acl_dvpp
    PROPERTIES
    OUTPUT_NAME acl_dvpp
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_include_directories(stub_acl_dvpp PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}
    ${BASE_DIR}/common
)

target_compile_definitions(stub_acl_dvpp PRIVATE
    ENABLE_DVPP_INTERFACE
    _FORTIFY_SOURCE=2
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_libraries(stub_acl_dvpp PRIVATE
    $<BUILD_INTERFACE:intf_pub>
)
#----------------------------------------------------------------------------------------------------------------#
############ stub/libacl_cblas.so ############
add_library(stub_acl_cblas SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/cblas_stub.cpp
)

target_include_directories(stub_acl_cblas PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
)

target_compile_definitions(stub_acl_cblas PRIVATE
    _FORTIFY_SOURCE=2
)

set_target_properties(stub_acl_cblas
    PROPERTIES
    OUTPUT_NAME acl_cblas
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_link_libraries(stub_acl_cblas PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)
#----------------------------------------------------------------------------------------------------------------#
############ stub/libacl_retr.so ############
add_library(stub_acl_retr SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/retr_stub.cpp
)
target_include_directories(stub_acl_retr PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
)
target_compile_definitions(stub_acl_retr PRIVATE
    _FORTIFY_SOURCE=2
)
set_target_properties(stub_acl_retr
    PROPERTIES
    OUTPUT_NAME acl_retr
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_link_libraries(stub_acl_retr PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)
#----------------------------------------------------------------------------------------------------------------#
############ stub/libacl_op_compiler.so ############
add_library(stub_acl_op_compiler SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/op_compiler_stub.cpp
)
target_include_directories(stub_acl_op_compiler PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${TOP_DIR}/graphengine/inc/framework
    ${BASE_DIR}/common
)
target_compile_definitions(stub_acl_op_compiler PRIVATE
    _FORTIFY_SOURCE=2
)
set_target_properties(stub_acl_op_compiler
    PROPERTIES
    OUTPUT_NAME acl_op_compiler
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_link_libraries(stub_acl_op_compiler PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)
##################################################################################################################

############ stub/libacl_tdt_channel.so ############
add_library(stub_acl_tdt_channel SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/tdt_channel_stub.cpp
)
target_include_directories(stub_acl_tdt_channel PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
)
target_compile_definitions(stub_acl_tdt_channel PRIVATE
    _FORTIFY_SOURCE=2
)
set_target_properties(stub_acl_tdt_channel
    PROPERTIES
    OUTPUT_NAME acl_tdt_channel
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_link_libraries(stub_acl_tdt_channel PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)
##################################################################################################################

############ stub/libacl_tdt_queue.so ############
add_library(stub_acl_tdt_queue SHARED
    ${CMAKE_CURRENT_BINARY_DIR}/tdt_queue_stub.cpp
)
target_include_directories(stub_acl_tdt_queue PRIVATE
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
)
target_compile_definitions(stub_acl_tdt_queue PRIVATE
    _FORTIFY_SOURCE=2
)
set_target_properties(stub_acl_tdt_queue
    PROPERTIES
    OUTPUT_NAME acl_tdt_queue
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stub
)

target_link_libraries(stub_acl_tdt_queue PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)
##################################################################################################################

############ libacl_dvpp.so ############
add_library(acl_dvpp SHARED
    single_op/dvpp/channel.cpp
    single_op/dvpp/vpc.cpp
    single_op/dvpp/jpeg.cpp
    single_op/dvpp/vdec.cpp
    single_op/dvpp/venc.cpp
    single_op/dvpp/png.cpp
    single_op/dvpp/base/image_processor.cpp
    single_op/dvpp/base/video_processor.cpp
    single_op/dvpp/base/venc_processor.cpp
    single_op/dvpp/base/vpc_processor.cpp
    single_op/dvpp/mgr/dvpp_manager.cpp
    single_op/dvpp/v100/image_processor_v100.cpp
    single_op/dvpp/v200/image_processor_v200.cpp
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>>:single_op/dvpp/v300/image_processor_v300.cpp>
    single_op/dvpp/v100/video_processor_v100.cpp
    single_op/dvpp/v200/video_processor_v200.cpp
    single_op/dvpp/common/dvpp_util.cpp
    types/dvpp.cpp
    $<$<STREQUAL:${PRODUCT},npuf10>:stub/libjpeg_lhisi_stub.cpp>)

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
    set(JPEG_INCCLUDE_PATH )
else()
    set(JPEG_INCCLUDE_PATH ${TOP_DIR}/open_source/libjpeg-turbo/include)
endif()

target_include_directories(acl_dvpp PRIVATE
####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/mmpa>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/mmpa>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/dvpp/inc/dvpp>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/acl/dvpp>
    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
    ${BASE_DIR}/toolchain
    ${JPEG_INCCLUDE_PATH}
)
target_compile_options(acl_dvpp PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -fno-common>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8>
)
target_compile_definitions(acl_dvpp PRIVATE
    $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,OS_TYPE=WIN,OS_TYPE=0>
    FUNC_VISIBILITY
    ENABLE_DVPP_INTERFACE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:SECUREC_USING_STD_SECURE_LIB=0 NOMINMAX>
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)
target_link_options(acl_dvpp PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
    -s
)

target_link_libraries(acl_dvpp PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    $<$<AND:$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>,$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>>>:$<BUILD_INTERFACE:dvpp_headers>>
    $<$<NOT:$<STREQUAL:${PRODUCT},npuf10>>:static_turbojpeg>
    static_mmpa
    -Wl,--no-as-needed
    runtime
    alog
    c_sec
    ascendcl
    # windows mpi is not supported
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>>:acl_dvpp_mpi>
    -Wl,--as-needed
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
set_target_properties(acl_dvpp PROPERTIES
    WINDOWS_EXPORT_ALL_SYMBOLS TRUE
    OUTPUT_NAME libacl_dvpp
)
endif()

############ libacl_cblas.so ############
add_library(acl_cblas SHARED
    single_op/blas/gemm_ops.cpp
    single_op/blas/gemv_ops.cpp
)

target_include_directories(acl_cblas PRIVATE
    ${BASE_DIR}
    ${BASE_DIR}/inc/ops
    ${BASE_DIR}/common
    ${BASE_DIR}/type
    ${BASE_DIR}/inc
    ${BASE_DIR}/inc/external
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/framework>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/framework>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
)

target_compile_options(acl_cblas PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -fno-common>
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Debug>>:/MTd>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Release>>:/MT>
)

target_compile_definitions(acl_cblas PRIVATE
    $<IF:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,OS_TYPE=WIN,OS_TYPE=0>
    FUNC_VISIBILITY
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_options(acl_cblas PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)

target_link_libraries(acl_cblas PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    -Wl,--no-as-needed
    c_sec
    ascendcl
    alog
    -Wl,--as-needed
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
    -ldl
)

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
set_target_properties(acl_cblas PROPERTIES
    WINDOWS_EXPORT_ALL_SYMBOLS TRUE
    OUTPUT_NAME libacl_cblas
)
endif()

############ libacl_retr.so ############
add_library(acl_retr SHARED
    single_op/retr/retr_ops.cpp
    types/retr.cpp
    single_op/retr/retr_internal.cpp
    single_op/retr/retr_init.cpp
    single_op/retr/retr_release.cpp
    single_op/retr/retr_repo.cpp
    single_op/retr/retr_accurate.cpp
    single_op/retr/retr_search.cpp
)

target_include_directories(acl_retr PRIVATE
    ${BASE_DIR}
    ${BASE_DIR}/inc/external
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
)

target_compile_options(acl_retr PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -Werror -fno-common>
    -ftrapv
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Debug>>:/MTd>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Release>>:/MT>
)

target_compile_definitions(acl_retr PRIVATE
    _FORTIFY_SOURCE=2
    OS_TYPE=0
    FUNC_VISIBILITY
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_options(acl_retr PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)

target_link_libraries(acl_retr PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    -Wl,--no-as-needed
    ascendcl
    alog
    runtime
    c_sec
    -Wl,--as-needed
    -ldl
)

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
set_target_properties(acl_retr PROPERTIES
    WINDOWS_EXPORT_ALL_SYMBOLS TRUE
    OUTPUT_NAME libacl_retr
)
endif()

############ libacl_tdt_queue.so ############
add_library(acl_tdt_queue SHARED
    tensor_data_transfer/queue.cpp
    tensor_data_transfer/queue_manager.cpp
    tensor_data_transfer/queue_process.cpp
    tensor_data_transfer/queue_process_host.cpp
    tensor_data_transfer/queue_process_mdc.cpp
    tensor_data_transfer/queue_process_ccpu.cpp
)

target_include_directories(acl_tdt_queue PRIVATE
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/driver>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/npuruntime/inc>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal/driver>

    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
)

target_compile_options(acl_tdt_queue PRIVATE
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Linux>:-fvisibility=hidden -O2 -Werror -fno-common>
    -ftrapv
    $<$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>:/utf-8>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Debug>>:/MTd>
    $<$<AND:$<STREQUAL:${TARGET_SYSTEM_NAME},Windows>,$<STREQUAL:${CMAKE_CONFIGURATION_TYPES},Release>>:/MT>
)

target_compile_definitions(acl_tdt_queue PRIVATE
    _FORTIFY_SOURCE=2
    OS_TYPE=0
    FUNC_VISIBILITY
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_options(acl_tdt_queue PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)

target_link_libraries(acl_tdt_queue PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    -Wl,--no-as-needed
    ascendcl
    static_mmpa
    alog
    runtime
    c_sec
    -Wl,--as-needed
    -ldl
)

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
set_target_properties(acl_tdt_queue PROPERTIES
    WINDOWS_EXPORT_ALL_SYMBOLS TRUE
    OUTPUT_NAME libacl_tdt_queue
)
endif()

if(NOT (ENABLE_OPEN_SRC AND ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3"))))
############ libacl_op_compiler.so ############
add_library(acl_op_compiler SHARED
    single_op/op_compiler.cpp
    single_op/compile/local_compiler.cpp
    single_op/compile/op_compile_processor.cpp
)

target_include_directories(acl_op_compiler PRIVATE
    ${BASE_DIR}
    ${BASE_DIR}/common
    ${BASE_DIR}/inc/external
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/framework>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/external>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/framework>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/external>
)

target_compile_options(acl_op_compiler PRIVATE
    -ftrapv
    -O2
    -Werror
    -Wno-deprecated-declarations
    -fvisibility=hidden
    -fno-common
)

target_compile_definitions(acl_op_compiler PRIVATE
    _FORTIFY_SOURCE=2
    OS_TYPE=0
    FUNC_VISIBILITY
    google=ascend_private
    $<$<STREQUAL:${ENABLE_OPEN_SRC},True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_options(acl_op_compiler PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)

target_link_libraries(acl_op_compiler PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    static_mmpa
    -Wl,--no-as-needed
    ascendcl
    slog
    runtime
    c_sec
    ge_runner
    ascend_protobuf
    json
    -Wl,--as-needed
    -ldl
     $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
)
endif()

if(NOT (ENABLE_OPEN_SRC AND ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3"))))
############ libacl_tdt_channel.so ############
add_library(acl_tdt_channel SHARED
    tensor_data_transfer/tensor_data_transfer.cpp
)

target_include_directories(acl_tdt_channel PRIVATE
    ####yellow zone####
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/ace/npuruntime/inc/tdt>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/framework>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/metadef/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/graphengine/inc/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/abl/adump/external>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:${TOP_DIR}/inc/driver>
    ####blue zone####
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/runtime>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/datagw>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/msprof>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/slog>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${BASE_DIR}/third_party/inc/tdt>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/framework>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${METADEF_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${CANN_GE_DIR}/inc/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/adump/external>
    $<$<BOOL:${ENABLE_OPEN_SRC}>:${ASCEND_INSTALL_PATH}/include/experiment/ascend_hal/driver>

    ${BASE_DIR}/inc/external
    ${BASE_DIR}/inc
    ${BASE_DIR}
    ${BASE_DIR}/common
)

target_compile_options(acl_tdt_channel PRIVATE
    -ftrapv
    -O2
    -Werror
    -Wno-deprecated-declarations
    -fvisibility=hidden
    -fno-common
)

target_compile_definitions(acl_tdt_channel PRIVATE
    _FORTIFY_SOURCE=2
    OS_TYPE=0
    FUNC_VISIBILITY
    $<$<STREQUAL:${ENABLE_OPEN_SRC}, True>:ONLY_COMPILE_OPEN_SRC>
    $<$<STREQUAL:${ENABLE_ACL_UT},ON>:ONLY_ENABLE_ACL_UT>
)

target_link_options(acl_tdt_channel PRIVATE
    -rdynamic
    -Wl,-Bsymbolic
    -Wl,--exclude-libs,ALL
)

target_link_libraries(acl_tdt_channel PRIVATE
    $<BUILD_INTERFACE:intf_pub>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:slog_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:msprof_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:mmpa_headers>>
    $<$<NOT:$<BOOL:${ENABLE_OPEN_SRC}>>:$<BUILD_INTERFACE:runtime_headers>>
    static_mmpa
    -Wl,--no-as-needed
    ascendcl
    acl_tdt_queue
    runtime
    c_sec
    slog
    datatransfer
    -Wl,--as-needed
    -ldl
    $<$<NOT:$<STREQUAL:${TARGET_SYSTEM_NAME},Android>>:-lrt>
)
endif()

############ install #############
install(TARGETS ascendcl ascendcl_headers
    EXPORT ascendcl-targets
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR} OPTIONAL COMPONENT opensdk
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR} OPTIONAL COMPONENT opensdk
    RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} OPTIONAL COMPONENT opensdk
)
install(TARGETS stub_ascendcl
    EXPORT ascendcl-targets
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}/stub OPTIONAL COMPONENT opensdk
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR} OPTIONAL COMPONENT opensdk
    RUNTIME DESTINATION ${INSTALL_RUNTIME_DIR} OPTIONAL COMPONENT opensdk
)
install(FILES   ${BASE_DIR}/inc/external/acl/acl.h
                ${BASE_DIR}/inc/external/acl/acl_base.h
                ${BASE_DIR}/inc/external/acl/acl_mdl.h
                ${BASE_DIR}/inc/external/acl/acl_op.h
                ${BASE_DIR}/inc/external/acl/acl_op_compiler.h
                ${BASE_DIR}/inc/external/acl/acl_rt.h
                ${BASE_DIR}/inc/external/acl/acl_rt_allocator.h
                ${BASE_DIR}/inc/external/acl/acl_tdt.h
                ${BASE_DIR}/inc/external/acl/acl_tdt_queue.h
                ${TOP_DIR}/abl/msprof/inc/external/acl/acl_prof.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/ascendcl/external/acl COMPONENT opensdk EXCLUDE_FROM_ALL
)
install(FILES   ${CANN_GE_DIR}/inc/external/ge/ge_error_codes.h
                ${TOP_DIR}/ace/npuruntime/inc/external/runtime/rt_error_codes.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/ascendcl/external/acl/error_codes COMPONENT opensdk EXCLUDE_FROM_ALL
)
install(FILES   ${BASE_DIR}/inc/external/acl/ops/acl_cblas.h
                ${BASE_DIR}/inc/external/acl/ops/acl_dvpp.h
                ${BASE_DIR}/inc/external/acl/ops/acl_fv.h
        DESTINATION ${INSTALL_INCLUDE_DIR}/ascendcl/external/acl/ops COMPONENT opensdk EXCLUDE_FROM_ALL
)
if (PACKAGE STREQUAL "opensdk")
    install(EXPORT ascendcl-targets DESTINATION ${INSTALL_CONFIG_DIR}
        FILE ascendcl-targets.cmake COMPONENT opensdk EXCLUDE_FROM_ALL
    )
    set(PKG_NAME ascendcl)
    configure_package_config_file(${TOP_DIR}/cmake/config/pkg_config_template.cmake.in
        ${CMAKE_CURRENT_BINARY_DIR}/ascendcl-config.cmake
        INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}
        PATH_VARS INSTALL_BASE_DIR INSTALL_INCLUDE_DIR INSTALL_LIBRARY_DIR INSTALL_RUNTIME_DIR INSTALL_CONFIG_DIR
        INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
    )
    unset(PKG_NAME)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ascendcl-config.cmake
        DESTINATION ${INSTALL_CONFIG_DIR} COMPONENT opensdk EXCLUDE_FROM_ALL
    )
endif()

if(${TARGET_SYSTEM_NAME} STREQUAL "Windows")
install(TARGETS  acl_dvpp acl_cblas acl_retr acl_op_compiler acl_tdt_channel acl_tdt_queue ascendcl_static OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
)
install(FILES $<TARGET_PDB_FILE:ascendcl acl_dvpp acl_cblas acl_retr> DESTINATION ${INSTALL_LIBRARY_DIR} OPTIONAL)
elseif(NOT ENABLE_OPEN_SRC)
install(TARGETS  acl_dvpp acl_cblas acl_retr acl_op_compiler acl_tdt_channel acl_tdt_queue ascendcl_static OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
)
else()
install(TARGETS  acl_dvpp acl_cblas acl_retr acl_tdt_queue OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
)
if(NOT (ENABLE_OPEN_SRC AND ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3"))))
install(TARGETS  acl_op_compiler acl_tdt_channel OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}
    ARCHIVE DESTINATION ${INSTALL_LIBRARY_DIR}
)
endif()
endif()

install(TARGETS  stub_acl_dvpp stub_acl_cblas stub_acl_retr stub_acl_op_compiler stub_acl_tdt_channel stub_acl_tdt_queue OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}/stub
)

install(TARGETS  stub_acl_dvpp stub_acl_cblas stub_acl_retr stub_acl_tdt_queue stub_ascendcl OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/stub
)

if(NOT (ENABLE_OPEN_SRC AND ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3"))))
install(TARGETS fwk_ascendcl OPTIONAL
    LIBRARY DESTINATION ${INSTALL_LIBRARY_DIR}/fwkacl
)
endif()

add_dependencies(stub_ascendcl stub_src)
add_dependencies(stub_acl_op_compiler stub_src)
add_dependencies(stub_acl_tdt_channel stub_src)
add_dependencies(stub_acl_tdt_queue stub_src)
add_dependencies(stub_acl_retr stub_src)
add_dependencies(stub_acl_cblas stub_src)
add_dependencies(stub_acl_dvpp stub_src)

if (ENABLE_OPEN_SRC
    AND NOT (ENABLE_ACL_UT OR ENABLE_ACL_COV OR ENABLE_C_UT OR ENABLE_C_COV)
    AND NOT ASCENDCL_C)
    set(ARCH_LINX_PATH "${CMAKE_SYSTEM_PROCESSOR}-linux")

    install(TARGETS acl_cblas
                    acl_dvpp
                    acl_retr
                    acl_tdt_queue
                    ascendcl
        LIBRARY DESTINATION ${ARCH_LINX_PATH}/lib64 OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
        ARCHIVE DESTINATION ${ARCH_LINX_PATH}/lib64 OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
    )

    install(TARGETS stub_acl_cblas
                    stub_acl_dvpp
                    stub_acl_retr
                    stub_acl_op_compiler
                    stub_acl_tdt_channel
                    stub_acl_tdt_queue
                    stub_ascendcl
        LIBRARY DESTINATION ${ARCH_LINX_PATH}/lib64/stub OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
        ARCHIVE DESTINATION ${ARCH_LINX_PATH}/lib64/stub OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
    )

    if (NOT ((PRODUCT STREQUAL "flr2") OR (PRODUCT STREQUAL "flr3")))
        install(TARGETS acl_op_compiler
                        acl_tdt_channel
            LIBRARY DESTINATION ${ARCH_LINX_PATH}/lib64 OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
            ARCHIVE DESTINATION ${ARCH_LINX_PATH}/lib64 OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
        )
    endif ()

    install(FILES ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_base.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_mdl.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_op.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_op_compiler.h
                  ${CMAKE_CURRENT_LIST_DIR}/third_party/inc/toolchain/external/acl/acl_prof.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_rt.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/acl_tdt.h
        DESTINATION ${ARCH_LINX_PATH}/include/acl OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
    )

    install(FILES ${CMAKE_CURRENT_LIST_DIR}/third_party/inc/graphengine/inc/external/ge/ge_error_codes.h
                  ${CMAKE_CURRENT_LIST_DIR}/third_party/inc/runtime/external/rt_error_codes.h
        DESTINATION ${ARCH_LINX_PATH}/include/acl/error_codes OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
    )

    install(FILES ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/ops/acl_cblas.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/ops/acl_dvpp.h
                  ${CMAKE_CURRENT_LIST_DIR}/inc/external/acl/ops/acl_fv.h
        DESTINATION ${ARCH_LINX_PATH}/include/acl/ops OPTIONAL COMPONENT packages EXCLUDE_FROM_ALL
    )

    set(version_info "${ASCEND_INSTALL_PATH}/runtime/version.info")
    set(install_script_dir "${CMAKE_CURRENT_BINARY_DIR}/install_scripts/")

    add_custom_target(generate_install_script_acl ALL
        COMMAND rm -rf ${install_script_dir}
        COMMAND cp -rf ${ASCEND_INSTALL_PATH}/toolkit/tools/ascend_project/open_install_scripts ${install_script_dir}
        COMMAND chmod -R u+w ${install_script_dir}
        COMMAND echo "base_package=runtime\;compiler" > ${install_script_dir}/version.info
        COMMAND echo "backup_dir=acl" >> ${install_script_dir}/version.info
        COMMAND grep -iE "'^(version|version_dir)='" ${version_info} >> ${install_script_dir}/version.info
    )

    install(DIRECTORY ${install_script_dir}
        DESTINATION . OPTIONAL
        FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_READ
        COMPONENT . EXCLUDE_FROM_ALL
    )

    set(CPACK_COMPONENTS_ALL ".;packages")
    set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
    set(CPACK_PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
    set(CPACK_PACKAGE_DESCRIPTION "CPack acl project")
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CPack acl project")
    set(CPACK_PACKAGE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/package)
    set(CPACK_PACKAGE_FILE_NAME "CANN-acl-linux.${CMAKE_SYSTEM_PROCESSOR}.run")
    set(CPACK_GENERATOR External)
    set(CPACK_CMAKE_GENERATOR "Unix Makefiles")
    set(CPACK_EXTERNAL_ENABLE_STAGING TRUE)
    set(CPACK_EXTERNAL_PACKAGE_SCRIPT ${ASCEND_INSTALL_PATH}/toolkit/tools/op_project_templates/ascendc/customize/cmake/makeself.cmake)
    set(CPACK_EXTERNAL_BUILT_PACKAGES ${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/${CPACK_PACKAGE_FILE_NAME}/${CPACK_PACKAGE_FILE_NAME})
    include(CPack)
endif()
